With the emergence of centralized computing such as cloud computing and other internet based high end computing implementations, new ways of implementing high performance computing systems are being investigated and pursued. The performance and/or efficiency of the non volatile mass storage used by high performance data centers are especially receiving more focused attention. Additionally, more and more computing systems, whether low end (e.g., smart appliance, smart phone), high end (e.g., server computer) or in-between desire more mass storage to keep large amounts of data and/or software and the ability to read/write information from/to mass storage with reduced access times. As such, generally, the performance of non volatile mass storage devices is receiving increased attention.
A flash memory cell can lose its stored data if the data is stored in the cell for too long a time period. As a consequence, solid state drives typically include a controller to “refresh” the flash storage cells. According to a common approach, before the expiration of a critical time period (e.g., ten days) after which a cell may lose its stored data, data is read from the cell and written elsewhere (to another cell). The writing of the cell's data elsewhere removes any concern that the cell's data will be lost. Subsequently, the cell is eventually written over with new data which starts a new critical time period before which the newly written data must be read and written elsewhere.
A problem with the aforementioned refreshing process is that it is relatively unsophisticated. Specifically, the refresh process periodically reads data from every cell and rewrites each cell's data to another cell within the critical time period according to a fixed time schedule. The refresh process is spread out over time to keep its instantaneous overhead low. Its constant operation, however, nevertheless ensures that the overhead is continuously present.
For example, in a solid state drive (SSD) having N available blocks of storage cells and a critical time period of ten days (a cell can lose information that it stores for more than ten days), the basic background refresh process (“background data refresh” (BDR)) will schedule constant block refreshing activity over time such that all N blocks are refreshed after ten days. That is, simplistically, the SSD will refresh blocks at a rate of N/10 different blocks per day for ten days and then restart the entire refreshing process on the eleventh day. The overhead of the constant background process translates into a permanent loss in the SSD's performance. That is, every day, some number of host accesses will be delayed waiting for refreshing activity to complete. In a specific BDR approach, only “relative” (rather than “actual”) ageing of cells is tracked/determined. Here, each newly written band is provided a sequence number when it is opened. A band's age is the difference between a global sequence number for the SSD and the band's specific sequence number. As such, how long the band has actually aged (in real time) is not determined.